﻿using System;
using W.Models.DataAccess;
using System.Collections.Generic;
using System.Linq;
using W.Models.Utils;

namespace W.Component
{
    public class ReservasEquiposComponent : ReservasComponent<ReservasEquipo>
    {
        public Response SecureCreate(ReservasEquipo Entity)
        {
            if (IsValid(Entity).Success)
            {
                Entity.Equipos = (Equipos)this.Get<Recursos>(Entity.Equipos.id);
                this.Create(Entity);
                this.Response.Success = true;
            }

            return this.Response;
        }

        public Response IsValid(ReservasEquipo Entity)
        {
            this._IsValid(Entity);
            return this.Response;
        }

        private void _IsValid(ReservasEquipo Entity)
        {
            List<ReservasEquipo> Reservas = this.Get(t => t.EstadosReserva.id == 0).FindAll(t => t.Equipos.id == Entity.Equipos.id);
            
            this.IsValidDateTimes(Entity);
            if (!this.Response.Success) return;

            if (Reservas != null)
            {
                HasNotTimeConfict(Reservas, Entity);
                if (!this.Response.Success) return;

                HasNotAulasTimeConflict(Entity);
                if (!this.Response.Success) return;
            }
        }

        private void HasNotAulasTimeConflict(ReservasEquipo Entity)
        {
            ReservasAulas ReservaAula = new ReservasAulas
            {
                inicio = Entity.inicio,
                fin = Entity.fin,
                Aulas = (Aulas)this.Model.Recursos.SingleOrDefault(t => t.id == Entity.Equipos.Aulas.id)
            };

            ReservasAulasComponent Component = new ReservasAulasComponent();

            List<Reservas> CollectionBase = this.Model.Reservas.Where(t => t.EstadosReserva.id == 0).ToList().FindAll(t => t.GetType() == typeof(ReservasAulas));

            List<ReservasAulas> Collection = CollectionBase.ConvertAll<ReservasAulas>(t => (ReservasAulas)t);
            Collection = Collection.FindAll(t => t.Aulas.id == Entity.Equipos.Aulas.id);
            if (Collection != null)
            {
                Component.HasNotTimeConfict(Collection, Entity);
                if (!this.Response.Success)
                {
                    this.Response.Message = "Conflicto de horario con el aula";
                    return;
                }
            }
        }
    }
}
